import { cac } from 'cac'
import chalk from 'chalk'
import { createLogger } from './logger'

const logger = createLogger('info', { prefix: '[Doraemon cli]' })
const cli = cac('doraemon')

// YAPI默认HOST地址
const DEFAULT_YAPI_HOST = 'http://yapi.theone.org'

// iconfont生成后的文件存放目录
const DEFAULT_ICONFONT_DIR = './src/common/style/iconfont.less'

cli
    .command('gen:api')
    .alias('api')
    .option(
        '--type <type>',
        '[string] 生成类型，值为js或ts (缺省为: js)'
    )
    .option(
        '--token <token>',
        '[string] YAPI对应项目的 token'
    )
    .option(
        '--host [host]',
        `[string] yapi 的 host 地址（缺省为：${DEFAULT_YAPI_HOST}）`
    )
    .action(async(options) => {
      const { run } = await import ('./yapi')

      if (!options.token) {
        logger.error(chalk.red('请通过 --token 来传入要生成的 yapi 项目所对应的 token'))
        process.exit(1)
      }

      if (!options.host) {
        options.host = DEFAULT_YAPI_HOST
        logger.warn(`未检测到 host 参数，已使用缺省host为${DEFAULT_YAPI_HOST}`)
      }

      run(options.type, options.token, options.host)
    })



cli
    .command('gen:icon')
    .alias('icon')
    .option(
        '--url <url>',
        '[string] iconfont 的 url 地址'
    )
    .option(
        '--path <path>',
        `[string] iconfont 生成后存放目录 （缺省为：${DEFAULT_ICONFONT_DIR}）`
    )
    .action(async(options) => {
      if (!options.url) {
        logger.error(chalk.red('请使用 --url 指定 iconfont 地址'))
        process.exit(1)
      }

      if (!options.path) {
        options.path = DEFAULT_ICONFONT_DIR
        logger.warn(`未检测到 path 参数，已使用缺省导出目录为${DEFAULT_ICONFONT_DIR}`)
      }

      const { run } = await import ('./iconfont')
      run(options.url, options.path)
    })

cli
    .command('upload')
    .alias('upload')
    .option(
        '--platform <platform>',
        '[string] 小程序平台 alipay/wechat 默认为wechat'
    )
    .option(
        '--key <key>',
        '[string] 微信小程序上传private.key的路径'
    )
    .option(
        '--appid <appid>',
        '[string] 小程序AppId'
    )
    .action(async(options) => {
      if (!options.appid) {
        logger.error(chalk.red('请指定appId，通过`--appid xxxx` 指定'))
        process.exit(1)
      }

      let platform = 'wechat'
      if (options.platform) {
        platform = options.platform
      }

      if (!options.key && platform !== 'alipay') {
        logger.error(chalk.red('请指定key，通过`--key xxxx` 指定'))
        process.exit(1)
      }

      if (platform === 'alipay') {
        const { run } = await import ('./upload/alipay')
        run(options.appid)
      } else {
        const { run } = await import ('./upload/wechat')
        run(options.appid, options.key)
      }
    })

cli.help()
// eslint-disable-next-line @typescript-eslint/no-var-requires
cli.version(require('../package.json').version)

cli.parse()
